package com.hmall.search.controller;


import com.hmall.common.domain.PageDTO;
import com.hmall.search.domain.po.ItemDoc;
import com.hmall.search.domain.query.ItemPageQuery;
import com.hmall.search.service.ISearchService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;


/**
 *
 * 依赖注入方式:
 * 成员变量注入:
 *         byType注入:@Autowired
 *         byName注入:@Resource
 *
 * 构造方法注入:
 *         类里需要有“有参构造”，不要再写无参构造:这样Spring在创建bean对象时，将不得不采用有参构造进行创建框架调用有参构造时，
 *         构造参数值会从I0C容器里查找并注入进来:byType注入
 *
 *         存在问题：
 *         类力有几个final类型的遍历，构造方法里就得有几个构造参数
 *         每增加一个final类型的变量，构造方法里就要增加一个参数
 *         解决方案
 *         @RequiredArgsConstructor 加在类上，会自动生成一个构造方法，构造方法里会自动将final类型的变量注入进来
 *
 */

@Api(tags = "搜索相关接口")
@RestController
@RequestMapping("/search")
@RequiredArgsConstructor
public class SearchController {

    private final ISearchService searchService;

    @ApiOperation("搜索商品")
    @GetMapping("/list")
    public PageDTO<ItemDoc> search(ItemPageQuery query) throws IOException {
        return searchService.query(query);
    }

}
